幸运的袋子
思想：回溯，先将袋子中球排序（从小到大），然后依次求和，求积比较，如果出现不符合条件的，就回溯
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int Getcount(vector<int>& v,int n,int pos,int sum,int multi)
{
    int count=0;
    for(int i=pos;i<n;i++)
    {
        sum+=v[i];
        multi*=v[i];
        if(sum>multi)
        {
            count+=1+Getcount(v,n,i+1,sum,multi);
        }
        else if(v[i]==1)
        {
            count+=Getcount(v,n,i+1,sum,multi);
        }
        else
        {
            break;
        }
        sum-=v[i];
        multi/=v[i];
        while(i<n-1&&v[i]==v[i+1])
            i++;
    }
    return count;
}
int main()
{
    int n=0;
    while(cin>>n)
    {
        vector<int> v(n);
        for(int i=0;i<n;i++)
        {
            cin>>v[i];
        }
        sort(v.begin(),v.end());
        cout<<Getcount(v,n,0,0,1)<<endl;
    }
    return 0;
}